perm filename RANGE.SAI[PIC,HE] blob sn#430342 filedate 1979-04-04 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	ENTRY RANGE
C00005 ENDMK
C⊗;
ENTRY RANGE;
BEGIN "RANGE"
REQUIRE "36A" COMPILER!SWITCHES;
REQUIRE "BUFDEC.SAI" SOURCE!FILE;
IFC STANFORD THENC REQUIRE "TENEXIO.SAI" SOURCE!FILE; ENDC

INTERNAL PROCEDURE RANGE(INTEGER BUF; REFERENCE INTEGER AMINB,AMAXB,MINB,MAXB,AVGB; REAL FRAC; BOOLEAN MULTIRANGE);
    BEGIN "RANGER"
    ! VARIABLE DECLARATIONS;
    INTEGER I,J,SUMB,PERPIC,PERTEST,PICUSE,PIXTOT,FLG,ISTOP,JSTOP,PNTR,BYT;
    SAFE INTEGER ARRAY PIXELS[0:BYT←2↑BYTSZ(BUF)-1];
    STRING FILNAM,STEMP;

    ISTOP←ROWS(BUF);
    JSTOP←COLMS(BUF);
    limit(buf,pixels,aminb,amaxb,sumb,0,0);

    DO BEGIN "RANGDAT"
	MINB←AMINB;
	MAXB←AMAXB;
	PERPIC←(PIXTOT←ISTOP*JSTOP)*FRAC;

	! NOW ADJUST MAX AND MIN TO SUIT DYNAMIC RANGE;
	IF FRAC>.000001 THEN
	    BEGIN
	    PERTEST←PIXELS[AMINB];
	    WHILE PERTEST < PERPIC DO
		BEGIN
		MINB←MINB+1;
		PERTEST←PERTEST+PIXELS[MINB];
		END;
	    PERTEST←PIXELS[AMAXB];
	    WHILE PERTEST < PERPIC DO
		BEGIN
		MAXB←MAXB-1;
		PERTEST←PERTEST+PIXELS[MAXB];
		END;
	    END;

	IF AMAXB = AMINB THEN PRINT("ARRGH! ALL THE VALUES ARE ",AMINB,"I GIVE UP",CRLF);
	AVGB←SUMB/PIXTOT;

	IF MULTIRANGE THEN
	    BEGIN
	    PRINT("AMINB= ",AMINB,CRLF,
	           "AMAXB= ",AMAXB,CRLF,
	           "MINB= ",MINB,CRLF,
	           "MAXB= ",MAXB,CRLF,
	           "AVGB= ",AVGB,CRLF);
	    PRINT("CUTOFF PERCENTAGE: ");
	    IF STEMP←INTTY THEN FRAC←REALSCAN(STEMP,0)
	    ELSE MULTIRANGE←FALSE;
	    END;
	END "RANGDAT"
    UNTIL NOT MULTIRANGE;

    END "RANGER";
END "RANGE";